class Nube{
  int numEsferas;
  float[] sca;
  float[] tra;
  float tam;
  
  // Constructor que se define por el número de esferas que se
  // desea tener en la nube
  Nube(int numEsf){
    numEsferas=numEsf;
    // Se crea un arreglo que contendrá los tres parámetros
    // para escalar cada una de las esferas
    sca=new float[numEsferas*3];
    // Se crea un arreglo que contendrá los tres parámetros
    // para trasladar cada una de las esferas
    tra=new float[numEsferas*3];
    // Se inicializan los valores de las esferas con variables aleatorias
    // uniformes con rangos definidos
    for(int i=0;i<numEsferas*3;i++){
      sca[i]=random(0.5,1.5);
      tra[i]=random(-10,10);
    }
    // Se inicializa con una variable aleatoria el parámetro de tamaño
    // de la esfera
    tam=random(5,10);
  }
  
  // Se simula la figura de la nube escalando y trasladando las esferas
  // de modo que se forme una forma amorfa 
  void dibujaNube(){
    noStroke();
    for(int i=0;i<numEsferas;i++){
      pushMatrix();
      scale(sca[i*3],sca[i*3+1],sca[i*3+2]);
      translate(tra[i*3],tra[i*3+2],tra[i*3+2]);
      sphere(tam);
      popMatrix();
    }
  }
}
